<?php

require_once dirname(__FILE__).'/../lib/spectacleGeneratorConfiguration.class.php';
require_once dirname(__FILE__).'/../lib/spectacleGeneratorHelper.class.php';

/**
 * spectacle actions.
 *
 * @package    tfe
 * @subpackage spectacle
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class spectacleActions extends autoSpectacleActions
{
     public function executeAutocomplete(sfWebRequest $request)
     {
       $this->getResponse()->setContentType('application/json');
       $request = Doctrine::getTable('Spectacle')->createQuery()
                    ->where("titre LIKE ?","%".$request->getParameter('q')."%")
                    ->limit($request->getParameter('limit'))
                    ->execute()
                    ->getData();

       $spectacles = array();
       foreach ( $request as $spectacle ){
         $spectacles[$spectacle->id] = (string) $spectacle;
       }
       return $this->renderText(json_encode($spectacles));

     }

     // utile pour que les actions batch respectent le softDelete
    protected function executeBatchDelete(sfWebRequest $request) {
        $ids = $request->getParameter('ids');

        $records = Doctrine_Query::create()
                ->select()
                ->from('Spectacle')
                ->whereIn('id', $ids)
                ->execute();

        $count = 0;
        foreach($records as $record){
            $count += $record->delete();
        }

        if ($count >= count($ids)) {
            $this->getUser()->setFlash('notice', 'The selected items have been deleted successfully.');
        }
        else {
            $this->getUser()->setFlash('error', 'A problem occurs when deleting the selected items.');
        }

        $this->redirect('@spectacle');
    }


    // creation d'un fichier CSV contenant noms + mails des participants aux spectacles séléctionnés
    protected function executeBatchCsvMails(sfWebRequest $request) {
        // creation d'un nom unique de fichier sur base d'un hashage de la concaténation du nom d'utilisateur et d'un timestamp
        // puis appelle à la méthode objet
        $filename = sha1($this->getUser().date('ymd').time()).'.csv';
        Spectacle::createCsvMails($request->getParameter('ids'),$filename);

        // redirection vers telechargement du fichier CSV genere
        $this->redirect('CSV/mails?filename='.$filename);
    }

    // creation d'un fichier CSV contenant noms + adresses des participants aux spectacles séléctionnés
    protected function executeBatchCsvLettres(sfWebRequest $request) {
        // creation d'un nom unique de fichier sur base d'un hashage de la concaténation du nom d'utilisateur et d'un timestamp
        // puis appelle à la méthode objet
        $filename = sha1($this->getUser().date('ymd').time()).'.csv';
        Spectacle::createCsvLettres($request->getParameter('ids'),$filename);

        // redirection vers telechargement du fichier CSV genere
        $this->redirect('CSV/lettres?filename='. $filename);
    }

    //surcharge methode form pour poser un setFlash si l'heure de debut et/ou la durée
    //est à null lorsque les dates sont spécifiées
     protected function processForm(sfWebRequest $request, sfForm $form) {
         $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));

         if($form->getValue('date_de_debut') != null && $form->getValue('date_de_fin') != null)
                 if($form->getValue('heure_de_debut') == null || $form->getValue('duree') == null)
                    $this->getUser()->setFlash('error','Si les dates sont spécifiées, entrez une heure de début ainsi qu\'une durée !',false);
                 else
                 {


                 if ($form->isValid()) {

                            $notice = $form->getObject()->isNew() ? 'The item was created successfully.' : 'The item was updated successfully.';
                            $spectacle = $form->save();
                            $this->dispatcher->notify(new sfEvent($this, 'admin.save_object', array('object' => $spectacle)));

                            if ($request->hasParameter('_save_and_add')) {
                                $this->getUser()->setFlash('notice', $notice.' You can add another one below.');
                                $this->redirect('@spectacle_new');
                            }
                            else {
                                $this->getUser()->setFlash('notice', $notice);
                                $this->redirect(array('sf_route' => 'spectacle_edit', 'sf_subject' => $spectacle));
                            }
                        }
                        else {
                            $this->getUser()->setFlash('error', 'The item has not been saved due to some errors.', false);
                        }
                 }
     }
}
